﻿#ifndef __JSONPARSE__H__
#define __JSONPARSE__H__
#include "cJSON.h"
#include <string>
#include <vector>
#include <assert.h>
#include <map>
#include "Data.h"


class CJSONParse
{
public:
	CJSONParse(const char* pJson = NULL);
	~CJSONParse();
	bool Load(const char* pJson);
	bool Release();

	cJSON* GetRootItem() { return m_pJsonRoot; }
	cJSON* GetFirstItem(const std::string& strName);
	cJSON* GetNextSiblingItem(const cJSON* pItem);
	//字符串
	bool GetValueStr(cJSON* pJson, const std::string& strName, std::string& strValue);
	bool GetValueStr(cJSON* pJson, const std::string& strName, CData& strValue);
	bool GetValueAuto(cJSON* pJson, const std::string& strName, CData& strValue);
	//ÕûÊý
	bool GetValueNumber(cJSON* pJson, const std::string& strName, int& nValue);
	//小数
	bool GetValueDouble(cJSON* pJson, const std::string& strName, double& dValue);

	void printJson(cJSON* root, std::map<std::string, std::string>& KeyValue);//以递归的方式打印json的最内层键值对

	void printJson(cJSON* root, std::map<CData, CData>& KeyValue);//以递归的方式打印json的最内层键值对

private:
	// 截取路径中的字符串
	void split(const std::string str, const std::string strPattern, std::vector<std::string>& strResultVec);

private:
	cJSON* m_pJsonRoot;
};

const char* safeGetStringValue(cJSON* object, const char* key);
#endif